package org.example.campusforum.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.campusforum.entity.Comment;
import org.example.campusforum.vo.CommentSonVO;
import org.example.campusforum.vo.CommentVO;

import java.util.List;

/**
 * 评论数据访问层接口
 *
 * 提供评论相关的数据库操作，包括评论的增删改查、层级评论查询等功能。
 * 支持顶级评论和子评论的分层查询，实现评论的树形结构展示。
 * 继承MyBatis Plus的BaseMapper接口，提供基础的CRUD操作。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Mapper
public interface CommentMapper extends BaseMapper<Comment> {

    /**
     * 查询文章的顶级评论列表
     *
     * 查询指定文章的所有顶级评论（parent_id = 0），
     * 并通过嵌套查询自动加载每个顶级评论的子评论列表。
     * 按创建时间降序排列，最新评论在前。
     *
     * @param articleId 文章ID
     * @return 顶级评论列表，每个评论包含其子评论
     */
    List<CommentVO> selectRootComments(@Param("articleId") Long articleId);

    /**
     * 查询指定评论的子评论列表
     *
     * 查询指定父评论下的所有子评论（回复），
     * 包含发表评论的用户和被回复的用户信息。
     * 按创建时间升序排列，早期回复在前。
     *
     * @param parentId 父评论ID
     * @param articleId 文章ID
     * @return 子评论列表
     */
    List<CommentSonVO> selectChildComments(@Param("parentId") Long parentId, @Param("articleId") Long articleId);

}
